#include "Joueur.h"

// Classes
#include "Classe.h"
#include "Barde.h"
#include "Clerc.h"
#include "Druide.h"
#include "Guerrier.h"
#include "Mage.h"
#include "Paladin.h"
#include "Rodeur.h"
#include "Specialiste.h"
#include "Voleur.h"
#include "MetaClasse.h"

// Races
#include "Race.h"
#include "DemiElfe.h"
#include "DemiOgre.h"
#include "DemiOrque.h"
#include "Elfe.h"
#include "Gnome.h"
#include "Hobbit.h"
#include "Humain.h"
#include "Nain.h"
#include "MetaRace.h"

// Utilitaires
#include "ArgParseur.h"
#include "Affichage.h"

// Fonctions émulant les anciens programmes
#include "AjoutSorts.h"

#include <boost/assign/list_of.hpp>

using namespace std;
using namespace boost::assign;

// fonctions basiques

int main( int argc, char* argv[] )
{
  map< string, string > Aide = map_list_of
    ( "-h/--help"  , "affichage de l'aide" )
    ( "-p/--prgm"  , "action désirée : sorts, voir, ecrire, evol ou cree (obligatoire)" )
    ( "-n/--nom"   , "nom du nouveau joueur" )
    ( "-r/--race"  , "race du nouveau joueur" )
    ( "-c/--classe", "classe(s) du nouveau joueur" );

  ArgParseur parseur( argc, argv, Aide );

  if ( ! parseur.initialisationFaite() )
    {
      cerr << "Problème lors de la lecture des arguments" << endl;
      cerr << parseur << endl;
      return 1;
    }

  if ( parseur.demandeAide() )
    {
      parseur.montreAide();
      return 0;
    }

  vector< string > arg;

  FlotMessage erreur( BLANK );
  erreur.setNiveauCourant( ERR );

  if ( parseur.lireOption( "-p", arg ) < 1 )
    {
      erreur << "Aucune action demandée" << endmsg;
      return 1;
    }

  if ( arg[ 0 ] == "sorts" )
    {
      produireHeader( "AjouterSorts",
		      "Permet de gérer les sorts des mages et des bardes" );
      Joueur * joueur = new Joueur();

      ajouterSorts( joueur );

      joueur -> ecrireXml();

      delete joueur;
    }
  else
    {
      erreur << "Ne sais pas quoi faire pour l'action '" << arg[ 0 ]
	     << "'!" << endmsg;
      return 0;
    }

  return 0;
}
